package it.gestionedocumentale.struts.action.admin.classificazione;

import java.util.List;

import it.gestionedocumentale.model.Classificazione;
import it.gestionedocumentale.model.Utente;
import it.gestionedocumentale.spring.service.MyServiceFactory;
import it.gestionedocumentale.struts.form.ClassificazioneForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.beans.BeanUtils;

public class ConfermaCRUDClassificazioneAction extends DispatchAction {
	private static Log log = LogFactory.getLog(ConfermaCRUDClassificazioneAction.class);
	
	@Override
	protected ActionForward dispatchMethod(ActionMapping arg0, ActionForm arg1,
			HttpServletRequest arg2, HttpServletResponse arg3, String arg4)
			throws Exception {
		Utente utenteSession = (Utente) arg2.getSession().getAttribute("utenteSession");
		if(utenteSession == null) {
			return arg0.findForward("notInSession");
		}
		if(!utenteSession.getGruppo().getCodGruppo().equals("ADMIN")) {
			return arg0.findForward("notAllowed");
		}
		return super.dispatchMethod(arg0, arg1, arg2, arg3, arg4);
	}
	
	public ActionForward inserisci(ActionMapping arg0, ActionForm arg1,
			HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
		ClassificazioneForm form = (ClassificazioneForm) arg1;
		List<Classificazione> listaClassificazioni = null;
		/*
		 * il codClassificazione deve essere univoco
		 * cerco se esiste gia' un classificazione con il codClassificazione inserito
		 */
		try {
			Classificazione classificazioneDaCercare = new Classificazione();
			classificazioneDaCercare.setCodClassificazione(form.getCodClassificazione());
			List<Classificazione> lista = MyServiceFactory.getClassificazioneService().findByExample(classificazioneDaCercare);
			if(lista != null && lista.size() > 0) {
				arg2.setAttribute("message", "COD_CLASSIFICAZIONE esistente - inserirne uno alternativo<br>");
				return arg0.findForward("codClassificazioneEsistente");
			}
			Classificazione classificazioneDaInserire = new Classificazione();
			BeanUtils.copyProperties(form, classificazioneDaInserire);
			MyServiceFactory.getClassificazioneService().save(classificazioneDaInserire);
			listaClassificazioni = MyServiceFactory.getClassificazioneService().findAll();
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return arg0.findForward("error");
		}
		arg2.setAttribute("message", "Nuova Classificazione inserita con successo!");
		arg2.setAttribute("listaClassificazioni", listaClassificazioni);
		return arg0.findForward("inserimentoOk");
	}
	
	public ActionForward modifica(ActionMapping arg0, ActionForm arg1,
			HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
		ClassificazioneForm form = (ClassificazioneForm) arg1;
		List<Classificazione> listaClassificazioni = null;
		try {
			MyServiceFactory.getClassificazioneService().update(form);
			listaClassificazioni = MyServiceFactory.getClassificazioneService().findAll();
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return arg0.findForward("error");
		}
		arg2.setAttribute("message", "Classificazione modificata con successo!");
		arg2.setAttribute("listaClassificazioni", listaClassificazioni);
		return arg0.findForward("modificaOk");
	}
	
	public ActionForward cancella(ActionMapping arg0, ActionForm arg1,
			HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
		ClassificazioneForm form = (ClassificazioneForm) arg1;
		Classificazione classificazioneDaCancellare = null;
		List<Classificazione> listaClassificazioni = null;
		try {
			classificazioneDaCancellare = MyServiceFactory.getClassificazioneService().findById(form.getIdClassificazione());
			MyServiceFactory.getClassificazioneService().delete(classificazioneDaCancellare);
			listaClassificazioni = MyServiceFactory.getClassificazioneService().findAll();
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return arg0.findForward("error");
		}
		String message = "Classificazione cancellata con successo!";
		if(listaClassificazioni == null || listaClassificazioni.size() < 1) {
			message += "<br><br>Lista Classificazioni vuota!";
		}
		arg2.setAttribute("message", message);
		arg2.setAttribute("listaClassificazioni", listaClassificazioni);
		return arg0.findForward("cancellaOk");
	}

}
